---
title: DECRBY
description: Redis DECRBY 命令用于将键中存储的数字值减去指定的减量。
sidebar:
  order: 2
---

import { Code } from '@astrojs/starlight/components'

将 key 所储存的值减去给定的减量值（decrement）。

如果 key 不存在，那么 key 的值会先被初始化为 0 ，然后再执行 DECRBY 操作。

如果值包含错误的类型，或字符串类型的值不能表示为数字，那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

### Redis 原生命令语法

<Code code={`DECRBY key decrement`} lang="bash" />

**参数说明**

- **key**: 要减少的键
- **decrement**: 减量值（可以为负数，负数时表示增加）

### 详细说明

DECRBY 命令是原子操作，可以用于实现计数器功能。它是一个针对字符串类型的操作，但要求字符串必须能够被解析为整数。

与 DECR 命令相比，DECRBY 允许指定具体的减量值，而不仅仅局限于 1。

## Redisun 使用方式

在 redisun 中，DECRBY 命令通过 DecrByCommand 类和 Redisun 类中的 decrBy 方法实现。

### 基本用法

<Code code={`Redisun redisun = Redisun.create(options -> {
    options.setAddress("redis://127.0.0.1:6379");
});

// 减少键的值（减少10）
long result = redisun.decrBy("mycounter", 10);
System.out.println("Counter value: " + result);

// 异步版本
CompletableFuture<Long> future = redisun.asyncDecrBy("mycounter", 10);
future.thenAccept(value -> System.out.println("Async counter value: " + value));`} lang="java" />

### 使用负数实现增加操作

<Code code={`// 增加键的值（减少-5，即增加5）
long result = redisun.decrBy("mycounter", -5);
System.out.println("Counter value: " + result);`} lang="java" />

## 注意事项

1. 如果 key 不存在，会自动创建并初始化为 0
2. 如果 key 存在但不是数字字符串，会抛出异常
3. 值的范围限制在 64 位有符号整数范围内
4. 操作是原子性的，适用于并发场景
5. decrement 参数可以为负数，此时实现的是增加操作

## 参考资料

- [Redis DECRBY 命令官方文档](https://redis.io/commands/decrby/)